/*
  主要作用是：从入口开始，遍历递归调用，分别生成对应的code编码
  从入口开始计算，得到entryMap，然后遍历entryMap.dependencies,取出其value(即依赖的模块的路径)，
  然后再获取这个依赖模块的依赖图谱，以此类推递归下去即可
*/
const exportDependencies = require('./exportDependencies.js');

const exportGraph = (entry) => {
  const entryModule = exportDependencies(entry);
  const graphArray = [entryModule];

  for (let index = 0; index < graphArray.length; index++) {
    const item = graphArray[index];

    //拿到文件所依赖的模块集合,dependencies的值参考exportDependencies
    const { dependencies } = item;
    for (let j in dependencies) {
      graphArray.push(exportDependencies(dependencies[j])); //关键代码，目的是将入口模块及其所有相关的模块放入数组
    }
  }
  // console.log(graphArray);
  //接下来生成图谱
  const graph = {};
  graphArray.forEach((item) => {
    graph[item.filename] = {
      dependencies: item.dependencies,
      code: item.code,
    };
  });

  //可以看出，graph其实是 文件路径名：文件内容 的集合
  return graph;
};

module.exports = exportGraph;
